# 2）测试用例的数据存储在Excel中，并编写一个从Excel中读取数据的测试类，包含的函数能够读取测试数据，并且能够写回测试结果，要求有返回值。
from openpyxl import load_workbook#从openpyxl模块中导入读取excel的类load_workbook
from openpyxl import workbook#从openpyxl模块中导入新建excel表格的模块workbook
from common.public.read_conf_file import ReadConfFile
from common.public import project_path
class DoExcel:
    '''读取Excel表格中的数据，并往表格中写入数据'''
    def __init__(self,filename):
        '''初始化函数'''
        self.filename = filename

    def readExcel(self,sheetName,section,case_id):
        '''读取excel表格'''
        case_id = ReadConfFile().readFile(project_path.con_path, section, case_id)#获取当前section下的option的值
        wb = load_workbook(self.filename)#定位到工作簿
        sheetName = wb[sheetName]#定位到表单数据

        #开始读取表格中的数据,以字典的形式存储单元格中的数据
        tel = self.get_tel_data()#拿到tel表格中的初始化手机号
        allCase = []
        if case_id == "all":
            for i in range(2,sheetName.max_row+1):#遍历每个单元格，获取单元格中的数据
                case = {}
                case["Id"] = sheetName.cell(i,1).value
                case["Module"] = sheetName.cell(i,2).value
                case["Description"] = sheetName.cell(i,3).value
                case["Method"] = sheetName.cell(i,4).value
                case["Url"] = sheetName.cell(i,5).value
                # new_param1 = sheetName.cell(i, 6).value
                # print(new_param1,type(new_param1))
                if sheetName.cell(i,6).value.find("tel")!=-1:#如果字符串中可以找不到tel，则返回-1
                    new_param = sheetName.cell(i,6).value.replace("tel",str(tel))#如果找到tel，将字符串tel替换为表格中的手机号
                    self.update_tel_data(int(tel) + 1)  # 更新电话号码
                else:
                    new_param = sheetName.cell(i,6).value#如果没有找到字符串tel，则直接读取当前单元格的value
                case["Param"] = new_param
                case["Sql"] = sheetName.cell(i,7).value
                case["ExpectedResult"] = sheetName.cell(i,8).value
                allCase.append(case)
        elif case_id == "1":
            case = {}
            case["Id"] = sheetName.cell(2,1).value
            case["Module"] = sheetName.cell(2,2).value
            case["Description"] = sheetName.cell(2,3).value
            case["Method"] = sheetName.cell(2,4).value
            case["Url"] = sheetName.cell(2,5).value
            if "tel" in sheetName.cell(2,6).value:#判断当前单元格中是否包含要查找的字符串
                new_param = sheetName.cell(2,6).value.replace("tel",str(tel))#存在要查找的字符串，则将字符串替换为想要的数据
                self.update_tel_data(int(tel) + 1)  #更新电话号码
            else:
                new_param = sheetName.cell(2,6).value#不存在要查找的字符串，则直接读取当前单元格的数据
            case["Param"] = new_param
            case["Sql"] = sheetName.cell(2,7).value
            case["ExpectedResult"] = sheetName.cell(2,8).value
            allCase.append(case)
        else:
            for i in eval(case_id):#遍历每个单元格，获取单元格中的数据
                case = {}
                case["Id"] = sheetName.cell(i+1,1).value
                case["Module"] = sheetName.cell(i+1,2).value
                case["Description"] = sheetName.cell(i+1,3).value
                case["Method"] = sheetName.cell(i+1,4).value
                case["Url"] = sheetName.cell(i + 1,5).value
                if sheetName.cell(i+1,6).value.find('tel')!=-1:
                    #判读字符串中是否存在tel，如果不存在，则返回-1，存在返回要查找字符串首字母所在的索引位置
                    new_param = sheetName.cell(i+1,6).value.replace("tel",str(tel))#如果找到tel，将字符串tel替换为表格中的手机号
                    self.update_tel_data(int(tel) + 1)  # 更新电话号码
                else:
                    new_param = sheetName.cell(i+1,6).value#如果没有找到字符串tel，则直接读取当前单元格的value
                case["Param"] = new_param
                case["Sql"] = sheetName.cell(i+1,7).value
                case["ExpectedResult"] = sheetName.cell(i+1,8).value
                allCase.append(case)
        wb.close()
        return allCase

    def writeExcel(self,sheetName,row,column,value):
        '''往excel表格中写入数据'''
        wb = load_workbook(self.filename)#定位到工作簿
        sheetName = wb[sheetName]#定位到表单
        sheetName.cell(row,column,value)
        wb.save(self.filename)
        wb.close()

    def get_tel_data(self):
        '''获取tel表格中的初始化手机号码'''
        wb = load_workbook(self.filename)
        sheetName = wb['tel']
        tel = sheetName.cell(1,2).value#定位获取手机号
        return tel

    def update_tel_data(self,value):
        '''更新手机号'''
        wb = load_workbook(self.filename)
        sheetName = wb['tel']
        sheetName.cell(1,2).value = value#更新手机号码
        wb.save(self.filename)

    def createExcel(self):
        '''新建excel表格'''
        wb = workbook.Workbook()
        wb.save(self.filename)

if __name__ == '__main__':
    res = DoExcel(project_path.case_path).readExcel("register","REGISTER","case_id")
    for i in res:
        print(i['Param'])

